#!/usr/bin/env node

/**
 * 应急代理恢复脚本
 * 当Node Fiddler服务异常关闭导致系统代理无法恢复时，运行此脚本
 * 
 * 使用方法：
 * node emergency-restore.js
 * 
 * 或者在PowerShell中：
 * npm run emergency-restore
 */

import { EnhancedSystemProxyManager } from "../src/proxy/enhanced-system-proxy.js";

console.log("🚨 Node Fiddler 应急代理恢复工具");
console.log("===============================\n");

const proxyManager = new EnhancedSystemProxyManager();

async function emergencyRestore() {
  try {
    console.log("🔍 检查当前代理状态...");
    const status = await proxyManager.getProxyStatus();
    
    if (status.enabled) {
      console.log(`📡 当前代理状态: ${status.enabled ? "已启用" : "已禁用"}`);
      if (status.server) {
        console.log(`🌐 代理服务器: ${status.server}`);
        console.log(`🎯 是否为我们的代理: ${status.isOurs ? "是" : "否"}`);
      }
    } else {
      console.log("✅ 当前系统代理已禁用，无需恢复");
      return;
    }
    
    console.log("\n🔄 开始应急恢复...");
    
    // 执行应急恢复
    const success = await proxyManager.emergencyRestore();
    
    if (success) {
      console.log("\n✅ 应急恢复完成！");
      console.log("🌐 您的网络连接应该已经恢复正常");
      
      // 再次检查状态
      const newStatus = await proxyManager.getProxyStatus();
      console.log(`\n📊 恢复后状态: ${newStatus.enabled ? "代理已启用" : "代理已禁用"}`);
    } else {
      console.error("\n❌ 应急恢复失败");
      console.log("请参考上面的手动恢复指南");
      process.exit(1);
    }
    
  } catch (error) {
    console.error("❌ 应急恢复失败:", error.message);
    console.log("\n🔧 手动恢复指南:");
    console.log("Windows用户:");
    console.log("1. 打开\"设置\" > \"网络和Internet\" > \"代理\"");
    console.log("2. 关闭\"使用代理服务器\"选项");
    console.log("3. 或运行命令: reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\" /v ProxyEnable /t REG_DWORD /d 0 /f");
    
    console.log("\nmacOS用户:");
    console.log("1. 打开\"系统偏好设置\" > \"网络\"");
    console.log("2. 选择您的网络连接，点击\"高级\"");
    console.log("3. 在\"代理\"标签页中，取消选中所有代理选项");
    
    process.exit(1);
  }
}

// 添加进程退出处理
process.on("SIGINT", () => {
  console.log("\n👋 应急恢复工具已退出");
  process.exit(0);
});

process.on("uncaughtException", (error) => {
  console.error("\n❌ 发生未预期的错误:", error.message);
  console.log("请尝试手动恢复系统代理设置");
  process.exit(1);
});

// 运行应急恢复
emergencyRestore(); 